/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import oracle.jdbc.*;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

/**
 *
 * @author Gregorovichz Carlos Rossi
 * @date   31/03/2010
 */
public class PerfilDespachador {

    public static List<Perfil> obtenerPerfiles() throws SQLException {
        List<Perfil> lstPerfiles = new ArrayList<Perfil>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_PERFILES(?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.registerOutParameter(1, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(1);
            while (rs.next()) {
                Perfil perfil = new Perfil();
                perfil.setNperfIdentificador(rs.getInt("NPERF_IDENTIFICADOR"));
                perfil.setCperfNombre(rs.getString("CPERF_NOMBRE"));
                perfil.setCperfDescripcion(rs.getString("CPERF_DESCRIPCION"));
                perfil.setBperfActivo(rs.getBoolean("BPERF_ACTIVO"));
                lstPerfiles.add(perfil);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstPerfiles;
    }

    public static List<PerfilRecurso> obtenerRecursoxPerfil(int nperfIdentificador) throws SQLException {
        List<PerfilRecurso> lstPerfilRecurso = new ArrayList<PerfilRecurso>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_RECURSO_PERFIL(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, nperfIdentificador);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            while (rs.next()) {
                PerfilRecurso perfilrecurso = new PerfilRecurso();
                perfilrecurso.setNpereIdentificador(rs.getInt("NPERE_IDENTIFICADOR"));
                perfilrecurso.setNperfIdentificador(rs.getInt("NPERF_IDENTIFICADOR"));
                perfilrecurso.setNmoduIdentificador(rs.getInt("NMODU_IDENTIFICADOR"));
                perfilrecurso.setCmoduDescripcion(rs.getString("CMODU_DESCRIPCION"));
                perfilrecurso.setNrecuIdentificador(rs.getInt("NRECU_IDENTIFICADOR"));
                perfilrecurso.setCrecuNombre(rs.getString("CRECU_NOMBRE"));
                perfilrecurso.setCrecuURL(rs.getString("CRECU_URL"));
                perfilrecurso.setBpereActivo(rs.getBoolean("BPERE_ACTIVO"));
                lstPerfilRecurso.add(perfilrecurso);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstPerfilRecurso;
    }

    public static void agregarPerfil(Perfil perfil) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_AGREGAR_PERFIL(?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setString(1, perfil.getCperfDescripcion());
            cs.setString(2, perfil.getCperfNombre());
            cs.setInt(3, perfil.isBperfActivo() ? 1 : 0);
            java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
            cs.setDate(4, sqlDate);
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void modificarPerfil(Perfil perfil) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_MODIFICAR_PERFIL(?,?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setString(1, perfil.getCperfDescripcion());
            cs.setString(2, perfil.getCperfNombre());
            cs.setInt(3, perfil.isBperfActivo() ? 1 : 0);
            java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
            cs.setDate(4, sqlDate);
            cs.setInt(5, perfil.getNperfIdentificador());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void eliminarPerfil(int nperfIdentificador) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_ELIMINAR_PERFIL(?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, nperfIdentificador);
            cs.execute();

        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }
}
